package cn.openea.perpartner.link.util;

import java.io.UnsupportedEncodingException;
import java.util.Base64;
import java.util.Random;

/**
 * @codeDesc:公共组件函数
 * @author: Mr.Yun
 * @QQ: 2034374624
 * @version: V1.0
 * @Created: 2021/08/18 17:10
 */
public class Tools {

    private static IdWorker worker = new IdWorker(3,1,1);

    /**
     * 获取唯一ID，重复概率极极极小，19位长度的long，19位长度的long
     * 本机机器id=1
     * ID具有渐大（类自增）且具有排序性，基于Snowflake算法进行生成
     * @return
     */
    public static long getNewUnid() {
        return worker.nextId();
    }

    /**
     * 判断字符串是否为空值或去掉前后空格长度为0
     *
     * @param string 要判断的字符串
     * @return 判断结果，true为空，false为非空
     */
    public static boolean isBlank(String string) {
        return (isEmpty(string)) || (string.trim().length() == 0);
    }

    /**
     * 判断字符串是否不为空值
     *
     * @param string 要判断的字符串
     * @return 判断结果，true为非空，false为空
     */
    public static boolean isNotBlank(String string) {
        return !isBlank(string);
    }

    /**
     * 判断字符串是否为null或"null"或长度为0
     *
     * @param string 要判断的字符串
     * @return 判断结果，true为空，false为非空
     */
    private static boolean isEmpty(String string) {
        return (string == null) || (string.equals("null")) || (string.length() == 0);
    }

    /**
     * 获得一个给定长度的随机字符串
     *
     * @param length 随机字符串的长度
     * @return 随机字符串
     */
    public static String getRandom(int length) {
        String allChar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        StringBuffer sb = new StringBuffer();
        int charlength = allChar.length();
        Random random = new Random();
        for (int i = 0; i < length; i++) {
            sb.append(allChar.charAt(random.nextInt(charlength)));
        }
        return sb.toString();
    }

    /**
     * 对字符串进行base64编码
     * @param str 待编码字符串
     * @return 编码字符串
     */
    public static String base64(String str) {
        // base64字符串
        String base64Str = "";
        try {
            byte[] data = str.getBytes("utf-8");
            base64Str = Base64.getEncoder().encodeToString(data);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return base64Str;
    }

    /**
     * 对字符串进行base64解码
     * @param base64Str 待解码字符串
     * @return 解码字符串
     */
    public static String unBase64(String base64Str) {
        String str = "";
        byte[] base64Data = Base64.getDecoder().decode(base64Str);
        try {
            str = new String(base64Data, "utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return str;
    }

    /**
     * 对字符串进行utf-8解码,只能解码utf-8格式的编码
     *
     * @param str 要解码的字符串
     * @return 解码后的字符串，若抛出异常，返回空字符串
     */
    public static String decode(String str) {
        try {
            return java.net.URLDecoder.decode(str, "utf-8");
        } catch (Exception e) {
            return "";
        }
    }

}
